#include <iostream>
#include <vector>

struct point
{
	point(double x = 0, double y = 0): x_(x), y_(y) {};

	double x()
	{
		return x_;
	}

	double y()
	{
		return y_;
	}

private:
        double x_, y_;
};

double squared(double x)
{
	return x * x;
}

struct segment 
{
	segment(point a, point b): a_(a), b_(b) {};

	double A() 
	{
		return b_.y() - a_.y();
	}

	double B()
	{
		return a_.x() - b_.x();
	}

	double C()
	{
		return b_.x() * a_.y() - a_.x() * b_.y();
	}

	double squared_length()
	{
		return squared(A()) + squared(B());
	}

	point& a()
	{
		return a_;
	}

	point& b() 
	{
		return b_;
	}

private:
	point a_, b_;
};

double squared_distance(point& a, point& b)
{
	return squared(a.x() - b.x()) + squared(a.y() - b.y());
}

double squared_distance(point& p, segment& s)
{
	double squared_distance_to_line = squared(s.A() * p.x() + s.B() * p.y() + s.C()) / s.squared_length();
	double sqr_max = squared_distance(p, s.a());
	double sqr_min = squared_distance(p, s.b());
	if (sqr_max < sqr_min)
	{
		std::swap(sqr_min, sqr_max);
	}
	if (sqr_max - squared_distance_to_line > s.squared_length())
	{
		return sqr_min;
	} 
	else
	{
		return squared_distance_to_line;
	}
}

size_t n;
double eps;
point* points;
std::vector<bool> used;

size_t simplify(size_t l, size_t r)
{
	size_t max_index = 0;
	segment s = segment(points[l], points[r]);
	double max = 0;
	for (size_t i = l + 1; i < r; ++i) 
	{
		double distance = squared_distance(points[i], s);
		if ((max < distance) && (distance > eps)) 
		{
			max = distance;
			max_index = i;
		}
	}
	if (max != 0)
	{
		used[max_index] = true;
		size_t result = 1;
		result += simplify(l, max_index);
		result += simplify(max_index, r);
		return result;
	} 
	else	
	{
		return 0;
	}
}

size_t simplify() 
{
	used.resize(n,false);
	used[0] = true;
	used[n - 1] = true;
	return simplify(0, n - 1) + 2;
}

int main()
{
	std::cin >> n;
	points = new point[n];
	double x, y;
	for (size_t i = 0; i < n; i++)
	{
		std::cin >> x >> y;
		points[i] = point(x, y);
	}
	std::cin >> eps;
	std:: cout << simplify() << "\n";
	for (size_t i = 0; i < n; i++)
	{
		if (used[i])
		{
			std::cout << i + 1 << " ";
		}
	}
	delete[] points;
	return 0;
}
